<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "tag".
 *
 * @property integer $id
 * @property string $name
 * @property integer $frequency
 */
class Tag extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'tag';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name'], 'required'],
            [['frequency'], 'integer'],
            [['name'], 'string', 'max' => 128],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
            'frequency' => 'Frequency',
        ];
    }

    /**
     * 逗号分隔的字符串转换为数组
     * 'Hello, World' --> ['Hello','World']
     */
    private static function string2array($tags)
    {
        return preg_split('/\s*,\s*/',trim($tags),-1,PREG_SPLIT_NO_EMPTY);
    }
    
    /**
     * Post增加Tags时，更新Tag计数
     * 新增的Tags可能为空，如果为空，则不做处理
     * 如果数据库中不存在此Tag，则新增Tag，计数为1
     * 如果数据库中已存在此Tag，则计数+1
     */
    private static function addTags($tags) {
        if(empty($tags)) //检查是否为空
        {
            return;
        }
        else
        {
            foreach ($tags as $name)
            {
                $aTag = Tag::find()->where(['name'=>$name])->one();
                $aTagCount = Tag::find()->where(['name'=>$name])->count(); //Tag数量，0或1
                
                if (!$aTagCount) //数据库中不存在此Tag
                {
                    $tag = new Tag;
                    $tag->name = $name;
                    $tag->frequency = 1;
                    $tag->save();
                }
                else //数据库中存在此Tag
                {
                    $aTag->frequency += 1;
                    $aTag->save();
                }
            }
        }
    }
    
    /**
     * Post减少Tags时，更新Tag计数
     * 减少的Tags可能为空，如果为空，则不做处理
     * 如果数据库中此Tag计数为1，则删除此Tag
     * 如果数据库中此Tag计数大于1，则计数-1
     */
    private static function removeTags($tags) {
        if(empty($tags)) //检查是否为空
        {
            return;
        }
        else
        {
            foreach ($tags as $name)
            {
                $aTag = Tag::find()->where(['name'=>$name])->one();
                $aTagCount = Tag::find()->where(['name'=>$name])->count(); //Tag数量，0或1
                
                if ($aTagCount) //数据库中存在此Tag
                {
                    if ($aTag->frequency<=1) //Tag计数<=1
                    {
                        $aTag->delete();
                    }
                    else                    // Tag计数>1
                    {
                        $aTag->frequency -= 1;
                        $aTag->save();
                    }
                }
            }
        }
    }
    
    public static function updateFrequency($oldTags, $newTags)
    {
        if (!empty($oldTags) || !empty($newTags))
        {
            $oldTagsArray = self::string2array($oldTags);
            $newTagsArray = self::string2array($newTags);
            
            self::addTags(array_diff($newTagsArray, $oldTagsArray)); //新增的Tags
            self::removeTags(array_diff($oldTagsArray, $newTagsArray)); //减少的Tags
            
        }
    }
}
